gtkplacesview: add a clear button to address entry
authorCarlos Soriano <csoriano@gnome.org>
Thu, 24 Sep 2015 09:26:59 +0000 (11:26 +0200)
committerCarlos Soriano <csoriano@gnome.org>
Thu, 15 Oct 2015 17:18:54 +0000 (19:18 +0200)
So it allows a quick way to clear the entry.

https://bugzilla.gnome.org/show_bug.cgi?id=756568

gtk/gtkplacesview.c
gtk/ui/gtkplacesview.ui

index 82c755e719999027d9a8cb0dcd5b54e23521a00b..2796c7a61b9929d870eb47e3426aa3172614bde7 100644 (file)
@@ -1828,11 +1828,19 @@ on_address_entry_text_changed (GtkPlacesView *view)
   priv = gtk_places_view_get_instance_private (view);
   supported = FALSE;
   supported_protocols = g_vfs_get_supported_uri_schemes (g_vfs_get_default ());
+  address = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->address_entry)));
+  if (strlen (address) > 0)
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->address_entry),
+                                       GTK_ENTRY_ICON_SECONDARY,
+                                       "edit-clear-symbolic");
+  else
+    gtk_entry_set_icon_from_icon_name (GTK_ENTRY (priv->address_entry),
+                                       GTK_ENTRY_ICON_SECONDARY,
+                                       NULL);
 
   if (!supported_protocols)
-    return;
+    goto out;
 
-  address = g_strdup (gtk_entry_get_text (GTK_ENTRY (priv->address_entry)));
   scheme = g_uri_parse_scheme (address);
 
   if (!scheme)
@@ -1846,6 +1854,15 @@ out:
   g_free (address);
 }
 
+static void
+on_address_entry_clear_pressed (GtkPlacesView        *view,
+                                GtkEntryIconPosition  icon_pos,
+                                GdkEvent             *event,
+                                GtkEntry             *entry)
+{
+  gtk_entry_set_text (entry, "");
+}
+
 static void
 on_recent_servers_listbox_row_activated (GtkPlacesView    *view,
                                          GtkPlacesViewRow *row,
@@ -2220,6 +2237,7 @@ gtk_places_view_class_init (GtkPlacesViewClass *klass)
   gtk_widget_class_bind_template_child_private (widget_class, GtkPlacesView, stack);
 
   gtk_widget_class_bind_template_callback (widget_class, on_address_entry_text_changed);
+  gtk_widget_class_bind_template_callback (widget_class, on_address_entry_clear_pressed);
   gtk_widget_class_bind_template_callback (widget_class, on_connect_button_clicked);
   gtk_widget_class_bind_template_callback (widget_class, on_key_press_event);
   gtk_widget_class_bind_template_callback (widget_class, on_listbox_row_activated);
index 697825528e91b70f6cccb70339da6f128b6518f7..1a1b84c2a7d63f492f2128635a1ecda8dae1bc79 100644 (file)
                 <property name="completion">address_entry_completion</property>
                 <signal name="notify::text" handler="on_address_entry_text_changed" object="GtkPlacesView" swapped="yes"/>
                 <signal name="activate" handler="on_connect_button_clicked" object="GtkPlacesView" swapped="yes"/>
+                <signal name="icon-press" handler="on_address_entry_clear_pressed" object="GtkPlacesView" swapped="yes"/>
               </object>
             </child>
             <child>